package com.bean;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import com.entities.Acheteur;
import com.entities.Magasin;
import com.entities.Produit;
import com.entities.Vendeur;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ejb.LocalBean;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 *
 * @author Mathieu
 */
@Stateless
@LocalBean
public class GestionnaireDeUser {
    @PersistenceContext(unitName = "EMall-ejbPU")
    private EntityManager em;
    @EJB
    private GestionnaireDeMagasin gestionnaireDeMagasin;

    
    public void creerAcheteur(Acheteur v) {
        this.persist(v);
    }
    
    public void creerVendeur(Vendeur v){
        this.persist(v);
    }
    
    public void creerMagasin(Magasin m){
        this.persist(m);
    }
    
    public void creerProduit(Produit p){
        this.persist(p);
    }
    
    public void persist(Object object) {
        em.persist(object);
    }
    
    public boolean connexionAcheteur(String login, String password){
        Query query = em.createNamedQuery("Acheteur.findByLoginAndPassword");
        query.setParameter("login", login);
        query.setParameter("password", password);
        List resultat = query.getResultList();
        System.out.println(login + password + resultat.size());
        if(resultat.size() >= 1){
            return true;
        }
        else return false;
    }
    
    public List<Produit> getPanier(Acheteur a, int first, int size) {
            Query q = em.createQuery("select p.panier from Acheteur p");         
            q.setMaxResults(size);
            q.setFirstResult(first);
            return q.getResultList();
    }
    
    public Vendeur getVendeurByLogin(String login){
        Query query = em.createNamedQuery("Vendeur.findLogin");
        query.setParameter("login", login);
        List resultat = query.getResultList();
        if(resultat.size() >= 1){
            return (Vendeur) resultat.get(0);
        }
        else return null;
    }
    
     public Acheteur getAcheteurByLogin(String login){
        Query query = em.createNamedQuery("Acheteur.findLogin");
        query.setParameter("login", login);
        List resultat = query.getResultList();
        if(resultat.size() >= 1){
            return (Acheteur) resultat.get(0);
        }
        else return null;
    }
    
    
    public boolean connexionVendeur(String login, String password){
        Query query = em.createNamedQuery("Vendeur.findByLoginAndPassword");
        query.setParameter("login", login);
        query.setParameter("password", password);
        List resultat = query.getResultList();
        System.out.println(login + password + resultat.size());
        if(resultat.size() >= 1){
            return true;
        }
        else return false;
    }
    
    public void inscriptionAcheteur(String nom, String prenom, String adresse, String login, String password){
        creerAcheteur(new Acheteur(nom, prenom, adresse, login, password));
    }
    
    public void inscriptionVendeur(String nom, String prenom, String adresse, String magasin, String description, String login, String password){
        Magasin m = new Magasin(magasin, description);
        creerMagasin(m);
        Vendeur v = new Vendeur(nom, prenom, adresse, login, password);
        gestionnaireDeMagasin.ajouterProprio(m, v);
    }
    
    public void creerUsersTest() {
        creerAcheteur(new Acheteur("Toto", "Toto", "Nice, France", "toto", "toto"));
        creerAcheteur(new Acheteur("Tata", "Tata", "Valbonne, France", "tata", "tata"));
        Magasin m = new Magasin("Mon magasin", "Vend tout et n'importe quoi");
        Magasin m1 = new Magasin("Mon magasin", "Vend tout et n'importe quoi");
        Vendeur v = new Vendeur("Toto", "Toto", "Villefranche-sur-Mer, France", "toto", "toto");
        Vendeur v1 = new Vendeur("Titi", "Toto", "Marseille", "toto", "toto");
        Magasin m2 = new Magasin("La halle aux chaussures", "Le palace des chaussures pour homme et femmes");
        Vendeur v2 = new Vendeur("Sophie", "Tournes", "Roquebilliere", "Sophie", "Tournes");
        Magasin m3 = new Magasin("Cap 3000", "Le plus grand centre commercial de France");
        Vendeur v3 = new Vendeur("Marie", "Clutier", "Saint Laurent du Var", "Marie", "Clutier");
        creerMagasin(m);
        creerVendeur(v);
        creerMagasin(m1);
        creerVendeur(v1);
        creerMagasin(m2);
        creerVendeur(v2);
        creerMagasin(m3);
        creerVendeur(v3);
        gestionnaireDeMagasin.ajouterProprio(m, v);
        gestionnaireDeMagasin.ajouterProprio(m1, v1);
        gestionnaireDeMagasin.ajouterProprio(m2, v2);
        gestionnaireDeMagasin.ajouterProprio(m3, v3);
        Produit p = new Produit("iPhone 5", "iPhone 5 neuf débloqué", new BigDecimal("599.00"), "High-Tech");
        creerProduit(p);
        gestionnaireDeMagasin.ajouterProduit(m1, p);
        Produit p1 = new Produit("iPhone 4", "iPhone 4 neuf débloqué", new BigDecimal("499.00"), "High-Tech");
        creerProduit(p1);
        gestionnaireDeMagasin.ajouterProduit(m, p1);
        Produit p8 = new Produit("Galaxy S3", "Samsung Galasy S3 16Go", new BigDecimal("399.00"), "High-Tech");
        creerProduit(p8);
        gestionnaireDeMagasin.ajouterProduit(m, p8);
        Produit p2 = new Produit("Appartement 2 pièces", "Super appartement 2 pièces avec vue mer", new BigDecimal("200000.00"), "Immobilier");
        creerProduit(p2);
        gestionnaireDeMagasin.ajouterProduit(m, p2);
        Produit p3 = new Produit("Bottes laureana", "Bottes aspect nubuck couleur camel de chez Laurenana ", new BigDecimal("40.00"), "Mode");
        creerProduit(p3);
        gestionnaireDeMagasin.ajouterProduit(m2, p3);    
        Produit p4 = new Produit("Sac Morgan", "Cabas en synthétique pourvu de 2 anses contrastées pour un porté main ou épaule ", new BigDecimal("20.00"), "Mode");
        creerProduit(p4);
        gestionnaireDeMagasin.ajouterProduit(m2, p4);  
        
    }
    
    public List<Produit> getUserProduit(int start, int nbComptes) {
        Query q = em.createNamedQuery("CompteBancaire.findAll");
        q.setFirstResult(start);
        q.setMaxResults(nbComptes);
        return q.getResultList();
    }
    
    public void addProduitPanier(Acheteur a, Produit p){
        
        a.addProduit(p);
        em.merge(a);
        
    }
    
    public void removeProduitPanier(Acheteur a, Produit p){
        a.removeProduit(p);
        em.merge(a);
    }
    

}
